package com.co.notaweb.entities;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;

import com.co.notaweb.enums.ModalidadColegioEnum;

/**
 * @author PC
 * @version 1.0
 * @created 13-nov-2011 12:14:23
 */
@Entity
@NamedQueries({ @NamedQuery(name = "Colegio.allColegios", query = "SELECT c FROM Colegio c") ,
		 @NamedQuery(name = "Colegio.colegiosByDocente", query = "SELECT c FROM Colegio c INNER JOIN c.docentes d WHERE d.id = :idDocente") })
public class Colegio {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;

	private String nombre;

	@Enumerated(EnumType.STRING)
	private ModalidadColegioEnum modalidad;

	private String nit;

	@OneToMany(mappedBy = "colegio")
	private List<Curso> cursos;

	@OneToMany(mappedBy = "colegio")
	private List<Periodo> periodos;

	@ManyToMany(mappedBy = "colegios")
	@JoinTable(name = "COLEGIO_DOCENTE", joinColumns = { @JoinColumn(name = "ID_COLEGIO") }, inverseJoinColumns = { @JoinColumn(name = "ID_DOCENTE") })
	private List<Docente> docentes;

	@OneToMany(mappedBy = "colegio")
	private List<Asignacion> asignaciones;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public ModalidadColegioEnum getModalidad() {
		return modalidad;
	}

	public void setModalidad(ModalidadColegioEnum modalidad) {
		this.modalidad = modalidad;
	}

	public String getNit() {
		return nit;
	}

	public void setNit(String nit) {
		this.nit = nit;
	}

	public List<Curso> getCursos() {
		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}

	public List<Periodo> getPeriodos() {
		return periodos;
	}

	public void setPeriodos(List<Periodo> periodos) {
		this.periodos = periodos;
	}

	public List<Docente> getDocentes() {
		return docentes;
	}

	public void setDocentes(List<Docente> docentes) {
		this.docentes = docentes;
	}

	public List<Asignacion> getAsignaciones() {
		return asignaciones;
	}

	public void setAsignaciones(List<Asignacion> asignaciones) {
		this.asignaciones = asignaciones;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (id ^ (id >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Colegio other = (Colegio) obj;
		if (id != other.id)
			return false;
		return true;
	}

}
